import time                                                 # импортируем модуль
 
class Pupil:                                                # создаем класс
    def __init__(self, Surname, Name, Mark):                # создаем конструктор
        self.Surname = Surname                              # свойство фамилия
        self.Name = Name                                    # свойство имя
        self.Mark = Mark                                    # свойство оценка
 
Pupils_amount = 0   # количество учеников
Best_pupils = []    # список отличников
Sum = 0             # "копилка" оценок
 
start_time = time.time()                                            # засекаем начало обработки
with open("pupils_large.txt", "r", encoding = "utf-8") as file:     # открываем файл на ЧТЕНИЕ
    for line in file:                                               # читаем файл построчно
        data = line.split(" ")                                      # считанную линию делим на элементы по пробелам
                                                                    # получим список вида ['Фамилия', 'И.', 'Оценка']
        data_pupil = Pupil(data[0], data[1], int(data[2]))          # создаем объект Pupil из элементов списка
        if data_pupil.Mark == 5:                                    # если его оценка - 5
            Best_pupils.append(data_pupil.Surname)                  # добавляем в список отличников фамилию
        Pupils_amount += 1                                          # увеличиваем общее количество учеников на 1
        Sum += int(data_pupil.Mark)                                 # добавляем оценку текущего
 
print("Средняя оценка:", (Sum/Pupils_amount), "\n\nЛучшие ученики:")# выводим среднюю оценку и лучших учеников
for pupil in Best_pupils:
     print(pupil)
 
print("Время выполнения: ", (time.time()-start_time), "секунд")     # замеряем время работы со старта
